#!/bin/bash

# 颜色定义
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
RESET='\033[0m'

# 方法1：使用 ip route list
get_route_ip_ip() {
    ip route list | awk '/^default/ {print $3}'
}

# 方法2：使用 route 命令
get_route_ip_route() {
    route -n 2>/dev/null | awk '/^0.0.0.0/ {print $2}'
}

# 方法3：使用 netstat 命令
get_route_ip_netstat() {
    netstat -rn 2>/dev/null | awk '/^0.0.0.0/ {print $2}'
}

# 方法4：使用简化的 ip r 命令
get_route_ip_ip_r() {
    ip r | awk '/^default/ {print $3}'
}

# 主函数：测试所有方法并比较结果
main() {
    echo -e "${GREEN}正在测试获取默认路由 IP 地址的多种方法：${RESET}"

    # 执行各方法获取默认路由 IP
    ip_ip=$(get_route_ip_ip)
    ip_route=$(get_route_ip_route)
    ip_netstat=$(get_route_ip_netstat)
    ip_ip_r=$(get_route_ip_ip_r)

    # 显示每种方法的结果
    echo -e "${YELLOW}方法1：ip route list -> ${GREEN}$ip_ip${RESET}"
    echo -e "${YELLOW}方法2：route 命令 -> ${GREEN}$ip_route${RESET}"
    echo -e "${YELLOW}方法3：netstat 命令 -> ${GREEN}$ip_netstat${RESET}"
    echo -e "${YELLOW}方法4：ip r 命令 -> ${GREEN}$ip_ip_r${RESET}"

    # 收集所有非空的 IP 地址
    results=("$ip_ip" "$ip_route" "$ip_netstat" "$ip_ip_r")
    unique_ips=($(printf "%s\n" "${results[@]}" | grep -v '^$' | sort -u))

    # 判断是否获取成功
    if [ ${#unique_ips[@]} -eq 0 ]; then
        echo -e "${RED}所有方法均未获取到默认路由 IP 地址，请检查网络配置。${RESET}"
    elif [ ${#unique_ips[@]} -eq 1 ]; then
        echo -e "${GREEN}所有方法获取的默认路由 IP 地址一致：${unique_ips[0]}${RESET}"
    else
        echo -e "${RED}方法获取的默认路由 IP 地址不一致，请手动检查：${RESET}"
        for ip in "${unique_ips[@]}"; do
            echo -e "${YELLOW}- $ip${RESET}"
        done
    fi
}

# 执行主函数
main
